// 系统相关工具函数
import type { ThemeMode, Language, SystemConfig } from '#shared/types/system'

/**
 * 检测系统主题偏好
 * @returns 系统是否为深色主题
 */
export function detectSystemTheme(): boolean {
  if (typeof window === 'undefined') return false
  return window.matchMedia('(prefers-color-scheme: dark)').matches
}

/**
 * 检测系统语言偏好
 * @returns 系统语言代码
 */
export function detectSystemLanguage(): Language {
  if (typeof navigator === 'undefined') return 'zh-CN'
  
  const lang = navigator.language || navigator.languages?.[0] || 'zh-CN'
  
  // 映射常见语言代码
  const languageMap: Record<string, Language> = {
    'zh': 'zh-CN',
    'zh-CN': 'zh-CN',
    'zh-TW': 'zh-CN',
    'en': 'en-US',
    'en-US': 'en-US',
    'en-GB': 'en-US',
    'ja': 'ja-JP',
    'ja-JP': 'ja-JP',
    'ko': 'ko-KR',
    'ko-KR': 'ko-KR'
  }
  // @ts-ignore
  return languageMap[lang] || languageMap[lang.split('-')[0]] || 'zh-CN'
}

/**
 * 检测系统时区
 * @returns 系统时区字符串
 */
export function detectSystemTimezone(): string {
  if (typeof Intl === 'undefined') return 'Asia/Shanghai'
  return Intl.DateTimeFormat().resolvedOptions().timeZone || 'Asia/Shanghai'
}

/**
 * 获取主题类名
 * @param isDarkMode 是否为深色模式
 * @returns CSS 类名
 */
export function getThemeClassName(isDarkMode: boolean): string {
  return isDarkMode ? 'dark' : 'light'
}

/**
 * 获取语言显示名称
 * @param language 语言代码
 * @returns 语言显示名称
 */
export function getLanguageDisplayName(language: Language): string {
  const names: Record<Language, string> = {
    'zh-CN': '简体中文',
    'en-US': 'English',
    'ja-JP': '日本語',
    'ko-KR': '한국어'
  }
  return names[language] || language
}

/**
 * 获取字体大小类名
 * @param fontSize 字体大小
 * @returns CSS 类名
 */
export function getFontSizeClassName(fontSize: 'small' | 'medium' | 'large'): string {
  const sizeMap = {
    small: 'text-sm',
    medium: 'text-base',
    large: 'text-lg'
  }
  return sizeMap[fontSize]
}

/**
 * 格式化当前时间
 * @param language 语言代码
 * @param timezone 时区
 * @param timeFormat 时间格式
 * @returns 格式化的时间字符串
 */
export function formatCurrentTime(
  language: Language,
  timezone: string,
  timeFormat: '12h' | '24h'
): string {
  const now = new Date()
  const options: Intl.DateTimeFormatOptions = {
    timeZone: timezone,
    hour12: timeFormat === '12h',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
  }
  return now.toLocaleString(language, options)
}

/**
 * 创建默认系统配置
 * @returns 默认系统配置对象
 */
export function createDefaultSystemConfig(): SystemConfig {
  return {
    defaultTheme: 'default',
    defaultLanguage: detectSystemLanguage(),
    defaultTimezone: detectSystemTimezone(),
    enableAutoTheme: true
  }
}

/**
 * 验证主题模式
 * @param theme 主题模式字符串
 * @returns 是否为有效的主题模式
 */
export function isValidThemeMode(theme: string): theme is ThemeMode {
  return ['default', 'v1', 'v2'].includes(theme)
}

/**
 * 验证语言代码
 * @param language 语言代码字符串
 * @returns 是否为有效的语言代码
 */
export function isValidLanguage(language: string): language is Language {
  return ['zh-CN', 'en-US', 'ja-JP', 'ko-KR'].includes(language)
}

/**
 * 监听系统主题变化
 * @param callback 主题变化回调函数
 * @returns 清理函数
 */
export function watchSystemTheme(callback: (isDark: boolean) => void): () => void {
  if (typeof window === 'undefined') {
    return () => {}
  }
  
  const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)')
  const handler = (e: MediaQueryListEvent) => callback(e.matches)
  
  mediaQuery.addEventListener('change', handler)
  
  return () => {
    mediaQuery.removeEventListener('change', handler)
  }
}